<?php
include_once 'app.model/ReparoDaOS.class.php';
include_once 'app.model/ProdutoDaOS.class.php';


class OS extends TRecord
{
	const TABLENAME='os';
	
	
	private $reparos;
	private $pecas;
	private $cliente;
	private $atualizacao;
	
	


	public function __construct($id = NULL) {
		parent::__construct($id);
	if ($id){
		$sql=new TSqlSelect();
		$sql->setEntity('osdocliente');
		$sql->addColumn('idcli');
		
		$criterio=new TCriteria();
		$criterio->add(new TFilter('idos', '=', $id));
		$sql->setCriteria($criterio);
		
		//obtém transação ativa
		if ($con=TTransaction::Pega())
		{
			//registra a mensagem de log
			TTransaction::Log($sql->getInstruction());
			//executa a cosulta no banco de dados
			$resultado=$con->query($sql->getInstruction());
			$resultado=$resultado->fetchObject()->idcli;
			$this->setCliente($resultado);
		
	}else
		{
			//se não tiver transação, retonra uma exceção
			throw  new Exception('Não há transação ativa!!');
		}
	}
}
	public function setCliente($id){
		if ($this->cliente->id){
			$this->atualizacao='sim';
			$this->cliente=new Cliente($id);
			
		}
		else{
			$this->atualizacao='não';
			$this->cliente=new Cliente($id);
		}
		
	}
	

	
	public function getCliente(){
		return $this->cliente;
	}

	
	
	public function store() {
		parent::store();
		
		//se tiver clinte
		if (($this->cliente) and ($this->atualizacao=='não')){
			
			TTransaction::Log('###############<br>\n');
			TTransaction::Log('Começo da Inserção<br>\n');
			$c= new OSDoCliente(NULL, $this->getCliente()->id, $this->getLast()); //crua uma nova instancia da tabela assosiativa
			//passando como paramento o id do cliente e ultima instancia gravado do os
			$c->store();
			TTransaction::Log('Fim da Inserção<br>\n');
			TTransaction::Log('###############<br>\n');
		}
		else if (($this->cliente) and ($this->atualizacao=='sim')){
			TTransaction::Log('###############<br>\n');
			TTransaction::Log('Começo da Atualização da os<br>\n');
			$sql=new TSqlSelect();
			$sql->setEntity('osdocliente');
			$sql->addColumn('id');
			
			$criterio=new TCriteria();
			$criterio->add(new TFilter('idos', '=', $this->id));
			$sql->setCriteria($criterio);
			
			//obtém transação ativa
			if ($con=TTransaction::Pega())
			{
				//registra a mensagem de log
				TTransaction::Log($sql->getInstruction());
				//executa a cosulta no banco de dados
				$resultado=$con->query($sql->getInstruction());
				$resultado=$resultado->fetchObject()->id;
				if ($resultado){
					$c=new OSDoCliente($resultado,NULL,NULL);
					$c->idcli=$this->cliente->id;
					$c->Armazena();
					TTransaction::Log('Fim da Atualização<br>\n');
					TTransaction::Log('###############<br>\n');
				}
			
			}else
			{
				//se não tiver transação, retonra uma exceção
				throw  new Exception('Não há transação ativa!!');
			}
		}
		
		
		//se tiver reparo
		if($this->reparos) //verifica se há algum reparo gravado
		{
			foreach ($this->reparos as $reparo) //pra cada reparo gravado
			{
				if ($reparo->id){ //se já tem um ID
					$reparo->store();
					if ($this->atualizacao=='sim'){
						$c= new ReparoDaOS(NULL,$this->id, $reparo->id);// e cria um para armazenar a relação
						$c->store();	//só grava no banco
					}
					else{
					$c= new ReparoDaOS(NULL,$this->getLast(), $reparo->id);// e cria um para armazenar a relação
					$c->store();	//só grava no banco
					}
				}else //se não tiver
				{	
					if($this->atualizacao=='sim'){
						$c= new ReparoDaOS(NULL,$this->id, $reparo->id);// e cria um para armazenar a relação
						$c->store();	//só grava no banco
					}else{
						
					$reparo->store();	//grava no banco
					$c= new ReparoDaOS(NULL,$this->getLast(), $reparo->getLast());// e cria um para armazenar a relação
					$c->store();
					}
				}
			}
		}
		if ($this->pecas)
		{
			foreach ($this->pecas as $peca)
			{
				if($peca->id){
					$peca->store();
					if($this->atualizacao=='sim'){
						$c= new PecaDaOS(NULL, $this->id, $peca->id);
						$c->store();
					}else{
					$c= new PecaDaOS(NULL, $this->getLast(), $peca->id);
					$c->store();
					}
				}else
				{
					$peca->store();
					if($this->atualizacao=='sim'){
						$c= new PecaDaOS(NULL, $this->id, $peca->id);
						$c->store();
					}else{
					$c= new PecaDaOS(NULL, $this->getLast(), $peca->getLast());
					$c->store();
					}
				}
			}
		}	
	
	}

public function adicionaReparo(Reparo $reparo){
	$this->reparos[]=$reparo;
}

/*
 * funçao CarregaReparos()
* esta função faz com que se crie uma nova instancia do registro de reparosdaos
* para fazer a mediação e caregar os os reparos da OS
*
*/
private function carregaReparos(){
	$reparos=new ReparoDaOS();
	$this->reparos=$reparos->carregaReparo($this->id);
}

/*
 * função get_telefone
* chama a função de mostrar reparos, e retorna um array com os reparos;
*/

public function get_reparo(){
	$this->carregaReparos();
	return $this->reparos;
}

public function adicionaPeca(Peca $peca){
	$this->pecas[]=$peca;
}

/*
 * funçao CarregaPecas()
* esta função faz com que se crie uma nova instancia do registro de pecadaos
* para fazer a mediação e caregar as pecas da OS
*
*/
private function carregaPecas(){
	$pecas=new PecaDaOS();
	$this->pecas=$pecas->carregaPeca($this->id);
}

/*
 * função get_peca
* chama a função de mostrar pecas, e retorna um array com as pecas;
*/

public function get_peca(){
	$this->carregaPecas();
	return $this->pecas;
}


}
?>